package com.gxy.learn.algorithm.sort;

/**
 * @description: 冒泡排序
 * 冒泡排序（Bubble Sort）也是一种简单直观的排序算法。它重复地走访过要排序的数列，一次比较两个元素，如果他们的顺序错误就把他们交换过来。
 * 走访数列的工作是重复地进行直到没有再需要交换，也就是说该数列已经排序完成。这个算法的名字由来是因为越小的元素会经由交换慢慢"浮"到数列的顶端。
 * @author: Gaoxueyong
 * @createDate: 2023/1/5 23:17
 */
public class BubbleSort {
    public static void main(String[] args) {
        int[] arry = {3, 8, 5, 7, 2, 6, 1, 4};
        for (int i = 0; i < arry.length-1; i++) {
            for (int j = 0; j < arry.length-i-1; j++) {
                if (arry[j] < arry[j+1]) {
                    swap(arry, j, j+1);
                }
            }
            print(arry, i);
        }
    }

    /**
     * 在数组arry中交换 i和j的位置
     *
     * @param arry
     * @param i
     * @param j
     * @return: void
     * @author: Gaoxueyong
     * @time: 2023/1/5 11:14 PM
     */
    static void swap(int[] arry, int i, int j) {
        int temp = arry[j];
        arry[j] = arry[i];
        arry[i] = temp;
    }

    /**
     * 数组打印
     *
     * @param arry  需要打印的数组
     * @param index 第几次打印
     * @return: void
     * @author: Gaoxueyong
     * @time: 2023/1/5 11:18 PM
     */
    static void print(int[] arry, int index) {
        System.out.println(String.format("第[%d]次排序", index + 1));
        for (int num : arry) {
            System.out.print(num + " ");
        }
        System.out.println();
    }
}
